.. _cmsMxVMoveStart: cmsMxMoveToStart ================================ -------------------------------- SYNOPSYS ````````````` .. code-block:: none VT_I4 cmsMxMoveToStart ([in] VT_I4 BoardId, [in] VT_I4 NumAxes, [in] VT_PI4 AxisList, [in] VT_PR8 PosList) DESCRIPTION ````````````` - 여러 개의 축에 대하여 지정한 절대좌표로의 이동을 시작합니다. 이 함수를 사용하면 여러 개의 축이 동시에 작업을 시작합니다. 따라서 이 함수는 여러축이 동기를 맞추어 작업을 시작해야하는 경우에 유용하게 사용될 수 있습니다. cmsMxMoveTo() 함수는 지정한 모든 축의 모션이 완료되기 전까지 반환되지 않으며, cmsMxMoveToStart() 함수는 모션을 시작시킨 후에 바로 반환됩니다. \ - 이 함수의 사용과 호출에 있어, 제공된 ㈜커미조아의 함수 헤더 Visual Basic 에서는 함수의 첨두어 cms 가 붙지 않습니다. PARAMETER ````````````` ▶ BoardId: 사용자가 설정한 디바이스(보드) ID. ▶ NumAxes : 동시에 작업을 수행할 대상 축의 수 ▶ AxisList : 동시에 작업을 수행할 대상 축의 배열 주소값. 이 배열의 크기는 NumAxes 값과 일치하거나 커야 합니다. ▶ DirList : 방향을 지시하는 값의 배열 주소값. 이 배열의 크기는 NumAxes 값과 일치하거나 커야 합니다. 모션의 방향을 지시하는 값은 다음과 같습니다. .. csv-table:: :widths: 10 90 :header-rows: 1 :stub-columns: 0 Value, Meaning 0 또는 cmsDIR_N, (-) 방향 1 또는 cmsDIR_P, (+) 방향 RETURN VALUE ````````````` +------------+-----------+ | Value | Meaning | +============+===========+ | 음수 | 수행 실패 | +------------+-----------+ | ERR_NONE | 수행 성공 | +------------+-----------+ EXAMPLE ````````` - 본 예제는 cmsMxMoveTo 를 사용하여 X1,Y1,Z1 축을 절대좌표 (1000,1000,1000) 지점으로 이동한 후 다시 절대좌표 (0,0,0) 지점으로 이동하는 예입니다. 이때 각축의 속도와 이동거리가 같으므로 동시에 종료될 것입니다. 하지만 속도 설정이 서로 다르거나 이동거리가 서로 다른 경우에는 각축이 동시에 시작해도 종료시점은 다를 수 있습니다. .. code-block:: c++ :linenos: :emphasize-lines: 5 C/C++ #define DEV0 0 #include "ComiSSCNET3_SDK.h" #include "ComiSSCNET3_SDK_Def.h" /*************************************************************** * OnProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이 * 적용되는 부분을 의미합니다. ***************************************************************/ void OnProgramInitial() { long m_nNumDevices; long m_DeviceList[16]; long m_nNumAxes; cmsLoadDll(); if(cmsGnLoadDevice(&m_nNumDevices, m_DeviceList, &m_nNumAxes) != ERR_NONE) { //Handle은 사용자가 생성한 폼의 핸들 값입니다. // 에러메시지 출력 return; } } /*************************************************************** * OnSetSpeed : 이 함수는 속도설정의 변경이 필요할 때 * 호출되는 가상의 함수 입니다. 이때 m_fVwork, m_fAcc, m_fDec 변수를 * 통하여 속도, 가속도 , 감속도 값이 적절하게 전달된다고 가정합니다. ***************************************************************/ void OnSetSpeed() { //각 축(Axis)의 기본 속도를 설정 합니다. cmsCfgSetSpeedPattern(DEV0, 0, cmsSMODE_S, m_fVwork, m_fAcc, m_fDec ,0,0); cmsCfgSetSpeedPattern(DEV0, cmsY1, cmsSMODE_S, m_fVwork, m_fAcc, m_fDec ,0,0); cmsCfgSetSpeedPattern(DEV0, cmsZ1, cmsSMODE_S, m_fVwork, m_fAcc, m_fDec,0,0 ); } /************************************************************** * OnDoMotion() : 작업명령시에 호출되는 가상의 함수 * 이 함수에서는 X1, Y1, Z1 축에 대하여 Velocity Move를 시작합니다. **************************************************************/ void OnDoMotion() { long nAxisList[3] = {0, cmsY1, cmsZ1}; long nDirList[3] = {cmsDIR_P, cmsDIR_P, cmsDIR_P}; //Positive dir // Start V-Move of X1&Y1&Z1 // if(cmsMxVMoveStart(DEV0, 3, nAxisList, nDirList) != ERR_NONE){ // 에러메시지 출력 return; } } ----------------------------------------------------------- Visual Basic Const DEV0 = 0 Dim i As Integer '========================================================== ' 이 함수에서 CfgSetSpeedPattern 함수로 속도를 설정하는 것은 ‘ 모든 모션의 기준속도(Standard Speed) 가 됩니다. ' 단축 구동을 비롯한 대부분의 모션 동작은 이 기준 속도의 비율로 동작되게 ‘ 됩니다. ' 아래 함수는 전체 축에 대해서 임의의 기준 속도를 설정하고 있습니다. '========================================================== For i = 0 To nTotalAxis-1 Call CfgSetSpeedPattern(DEV0, i, cmsSMODE_S, 10000, 20000, 20000,0,0) Next End Sub Private Sub btnMove_Click() Dim Direction(2) As Long Dim AxisList(2) As Long Dim nRetVal As Long AxisList(0) = 0 AxisList(1) = 1 Direction(0) = cmsDIR_P Direction(1) = cmsDIR_P ' 이 함수는 지정된 속도로 정지(停止) 함수가 호출 될때까지 계속 이동합니다. nRetVal = MxVMoveStart(DEV0, 2, AxisList(0), Direction(0)) End Sub ----------------------------------------------------------- Delphi Procedure btnSetSpeedClick(); var fAccelSpeed : Double; fDecelSpeed : Double; fWorkSpeed : Double; nSMODE : LongInt; begin fAccelSpeed := 30000; fDecelSpeed := 30000; fWorkSpeed := 10000; nSMODE := cmsSMODE_S; // 0을 위해 설정된 기준 속도를 실제 SDK 함수에 전달합니다. cmsCfgSetSpeedPattern( 0, // 현재 설정된 디바이스 ID를 선택합니다. 0, // 현재 활성화 되어 있는 채널을 선택합니다. nSMODE, // 가감속이 없는 모드와 선형 가감속, S-CURVE 가감속을 설정합니다. fWorkSpeed, // 작업 속도를 설정합니다. fAccelSpeed, // 가속도를 설정합니다. fDecelSpeed, // 감속도를 설정합니다. 0, //초기속도를 설정합니다. 0) ; //최종속도를 설정합니다. // cmsY1을 위해 설정된 기준 속도를 실제 SDK 함수에 전달합니다. cmsCfgSetSpeedPattern( 0, // 현재 설정된 디바이스 ID를 선택합니다. cmsY1, // 현재 활성화 되어 있는 채널을 선택합니다. nSMODE, // 가감속이 없는 모드와 선형 가감속, S-CURVE 가감속을 설정합니다. fWorkSpeed, // 작업 속도를 설정합니다. fAccelSpeed, // 가속도를 설정합니다. fDecelSpeed, // 감속도를 설정합니다. 0, //초기속도를 설정합니다. 0) ; //최종속도를 설정합니다. end; procedure FormCreate(); var g_nDevs : LongInt; DevList : Array[0..15] of LongInt g_nAxis : LongInt; begin // Load ComiSSCNET3(DLL) Library if ( cmsGnLoadDevice (@g_nDevs, @DevList, @g_nAxis) <> ERR_NONE ) then begin // 마지막에 발생한 에러를 화면에 표시합니다. // 함수 인자로는 Form 의 Handle 이 전달됩니다. // 에러메시지 출력 exit; end end; // * Description : // * // * 속도 모드로 반대 방향으로 다축(Multi Axes) 이동을 시작합니다. procedure TForm1.btnNegativeClick(Sender: TObject); var AxisList : Array[0..1] of LongInt; DirList : Array[0..1] of LongInt; i : LongInt; begin // 이송 버튼을 비활성화합니다. btnPositive.Enabled := FALSE; btnNegative.Enabled := FALSE; For i:=0 to 1 do begin DirList[i] := cmsDIR_N; // 역방향 end; AxisList[0] := 0; AxisList[1] := cmsY1; //다축을 대상으로 속도제어(지정한 속도로 정지(停止)명령이 있을 때 까지 이동) // 에는 다음과 같이 cmsMxVMoveStart(...) 함수를 사용합니다. cmsMxVMoveStart(0, 2,@AxisList,@DirList); end; -----------------------------------------------------------